热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

侧边|篇文章_带你实现开发者头条实现左滑菜单

篇首语:本文由编程笔记#小编为大家整理,主要介绍了带你实现开发者头条实现左滑菜单相关的知识,希望对你有一定的参考价值。今天开始模仿开发者头条的侧滑菜单,

篇首语:本文由编程笔记#小编为大家整理,主要介绍了带你实现开发者头条 实现左滑菜单相关的知识,希望对你有一定的参考价值。


今天开始模仿开发者头条的侧滑菜单,是本系列第二篇文章,相信大家已经看到很多app使用这种侧滑。今天我来教大家用android自带DrawerLayout控件实现。

DrawerLayout是SupportLibrary包中实现了侧滑菜单效果的控件,可以说DrawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物。DrawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(DrawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现)。


一.先上效果图:


二.代码实现

1.drawerLayout其实是一个布局控件,跟LinearLayout等控件是一种东西,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果。我这边把侧滑菜单的内容放一个布局文件了。

<android.support.v4.widget.DrawerLayout
xmlns:android&#61;"http://schemas.android.com/apk/res/android"
android:id&#61;"&#64;&#43;id/drawer_layout"
android:layout_width&#61;"match_parent"
android:layout_height&#61;"match_parent" >

<RelativeLayout
android:layout_width&#61;"match_parent"
android:layout_height&#61;"match_parent"
android:clipToPadding&#61;"true"
android:fitsSystemWindows&#61;"true" >

<include
android:id&#61;"&#64;&#43;id/rl_title"
layout&#61;"&#64;layout/layout_main_title" />


<FrameLayout
android:id&#61;"&#64;&#43;id/content_frame"
android:layout_width&#61;"match_parent"
android:layout_height&#61;"match_parent"
android:layout_below&#61;"&#64;&#43;id/rl_title"
android:background&#61;"&#64;color/white_normal" >

FrameLayout>
RelativeLayout>

<FrameLayout
android:id&#61;"&#64;&#43;id/left_drawer"
android:layout_width&#61;"280dp"
android:layout_height&#61;"match_parent"
android:layout_gravity&#61;"start" >


<include layout&#61;"&#64;layout/layout_main_left" />
FrameLayout>
android.support.v4.widget.DrawerLayout>

注意事项
主内容区的布局代码要放在侧滑菜单布局的前面,这可以帮助DrawerLayout判断谁是侧滑菜单&#xff0c;谁是主内容区
侧滑菜单的部分的布局&#xff08;这里是ListView&#xff09;可以设置layout_gravity属性&#xff0c;他表示侧滑菜单是在左边还是右边。

2.MainActivity.java 继承FragmentActivity
1).设置内容Fragment&#xff0c;设置状态栏
2).处理左侧点击事件,在点击事件中设置选中背景&#xff0c;关闭左边侧滑菜单。

public class MainActivity extends FragmentActivity
private DrawerLayout mDrawerLayout;
private RelativeLayout rlHome, rlGift, rlShare;
private int currentSelectItem &#61; R.id.rl_home;// 默认首页
private ContentFragment contentFragment;
&#64;Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout &#61; (DrawerLayout) findViewById(R.id.drawer_layout);
findViewById(R.id.iv_menu).setOnClickListener(clickListener);
initLeftMenu();//初始化左边菜单
contentFragment&#61;new ContentFragment();
getSupportFragmentManager().beginTransaction().add(R.id.content_frame,contentFragment).commit();
setWindowStatus();

private void initLeftMenu()
rlHome &#61; (RelativeLayout) findViewById(R.id.rl_home);
rlGift &#61; (RelativeLayout) findViewById(R.id.rl_gift);
rlShare &#61; (RelativeLayout) findViewById(R.id.rl_share);
rlHome.setOnClickListener(onLeftMenuClickListener);
rlGift.setOnClickListener(onLeftMenuClickListener);
rlShare.setOnClickListener(onLeftMenuClickListener);
rlHome.setSelected(true);

private OnClickListener onLeftMenuClickListener &#61; new OnClickListener()
&#64;Override
public void onClick(View v)
if (currentSelectItem !&#61; v.getId()) //防止重复点击
currentSelectItem&#61;v.getId();
noItemSelect();
switch (v.getId())
case R.id.rl_home:
rlHome.setSelected(true);
contentFragment.setContent("这是首页");
break;
case R.id.rl_gift:
rlGift.setSelected(true);
contentFragment.setContent("这是礼物兑换");
break;
case R.id.rl_share:
rlShare.setSelected(true);
contentFragment.setContent("这是我的分享");
break;

mDrawerLayout.closeDrawer(Gravity.LEFT);


;
private void noItemSelect()
rlHome.setSelected(false);
rlGift.setSelected(false);
rlShare.setSelected(false);

private OnClickListener clickListener &#61; new OnClickListener()
&#64;Override
public void onClick(View v)
switch (v.getId())
case R.id.iv_menu:// 打开左边抽屉
mDrawerLayout.openDrawer(Gravity.LEFT);
break;


;
// 设置状态栏
private void setWindowStatus()
if (Build.VERSION.SDK_INT >&#61; Build.VERSION_CODES.KITKAT)
// 透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
// 设置状态栏颜色
getWindow().setBackgroundDrawableResource(R.color.main_color);


3.左侧菜单item选中背景的布局文件 selector_left_menu_item.xml。


<selector xmlns:android&#61;"http://schemas.android.com/apk/res/android">
<item android:drawable&#61;"&#64;color/menu_left_item_select" android:state_selected&#61;"true"/>
<item android:drawable&#61;"&#64;color/white_normal"/>
selector>

4.ContentFragment 显示内容的Fragment 这里我加了一个设置内容的方法&#xff0c;就是用来点击左侧切换显示用的。

public class ContentFragment extends Fragment
private TextView tvContent;
&#64;Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
View rootView&#61;LayoutInflater.from(getActivity()).inflate(R.layout.fragment_content, null);
tvContent&#61;(TextView) rootView.findViewById(R.id.tv_content);
return rootView;

public void setContent(String content)
tvContent.setText(content);

5.drawerLayout与Fragment是什么关系&#xff1f;
我们看到很多使用drawerLayout的代码中都同时使用了Fragment&#xff0c;这会造成误解&#xff0c;以为使用drawerLayout必须用到Fragment&#xff0c;其实这是错误的&#xff0c;使用Fragment是因为在侧滑菜单被点击的时候&#xff0c;主内容区如果内容比较复杂&#xff0c;用Fragment去填充会更容易&#xff0c;如果你的主内容区只是一个简单的字符串&#xff0c;只想在不同菜单点击的时候更新一下字符串的内容&#xff0c;我觉得没必要用Fragment。我这边用Fragment所做的就是更新字符串内容这么简单。


三.源码下载

点击下载源码


四.相关文章:

单独写的一个DrawerLayout的demo

带你实现开发者头条(一) 启动页实现
带你实现开发者头条(二) 实现左滑菜单
带你实现开发者头条APP(三) 首页实现
带你实现开发者头条APP(四) 首页优化(加入design包)
带你实现开发者头条APP(五)–RecyclerView下拉刷新上拉加载

推荐下自己创建的android QQ群: 202928390欢迎大家的加入.

如果你想第一时间看我们的后期文章&#xff0c;扫码关注公众号&#xff0c;每周不定期推送Android开发实战教程文章&#xff0c;你还等什么&#xff0c;赶快关注吧&#xff0c;学好技术&#xff0c;&#xff0c;出任ceo&#xff0c;赢取白富美。。。。。。。。。。

Android开发666 - 安卓开发技术分享
扫描二维码加关注


推荐阅读
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了如何在Unity中实现一个简单的广告牌着色器,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 在Android开发中,实现多点触控功能需要使用`OnTouchListener`监听器来捕获触摸事件,并在`onTouch`方法中进行详细的事件处理。为了优化多点触控的交互体验,开发者可以通过识别不同的触摸手势(如缩放、旋转等)并进行相应的逻辑处理。此外,还可以结合`MotionEvent`类提供的方法,如`getPointerCount()`和`getPointerId()`,来精确控制每个触点的行为,从而提升用户操作的流畅性和响应性。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
author-avatar
不分手得恋爱假的_457
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有